package br.com.edumobi.fragments;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

import com.github.mikephil.charting.charts.PieChart;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.PieData;
import com.github.mikephil.charting.data.PieDataSet;

import java.util.ArrayList;
import java.util.List;

import br.com.edumobi.P;
import br.com.edumobi.R;
import br.com.edumobi.dados.IDadosLocal;
import br.com.edumobi.dados.modelos.Desempenho;
import br.com.edumobi.dados.modelos.Simulado;

public class MSResultadoFragment extends GenericoFragment {

    private TextView textViewTituloSimuladoMSResultadoFragment;
    private PieChart pieChartQtdAcertoErroEFalstososMSResultadoFragment;
    private Button buttonFinalizarMSResultadoFragment;
    private Button buttonReiniciarMSResultadoFragment;

    private AcoesMSResultadoFragment activity;

    private String tituloSimulado;
    private int qtdAcertos;
    private int qtdErros;
    private int qtdNaoRespondidos;

    private View.OnClickListener clickButtonFinalizarMSResultadoFragment = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            activity.finalizar();
        }
    };

    private View.OnClickListener clickButtonReiniciarMSResultadoFragment = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            activity.reiniciar();
        }
    };

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_ms_resultado, container, false);

        textViewTituloSimuladoMSResultadoFragment = (TextView) view.findViewById(R.id.textViewTituloSimuladoMSResultadoFragment);
        pieChartQtdAcertoErroEFalstososMSResultadoFragment = (PieChart) view.findViewById(R.id.pieChartQtdAcertoErroEFalstososMSResultadoFragment);
        buttonFinalizarMSResultadoFragment = (Button) view.findViewById(R.id.buttonFinalizarMSResultadoFragment);
        buttonReiniciarMSResultadoFragment = (Button) view.findViewById(R.id.buttonReiniciarMSResultadoFragment);

        buttonFinalizarMSResultadoFragment.setOnClickListener(clickButtonFinalizarMSResultadoFragment);
        buttonReiniciarMSResultadoFragment.setOnClickListener(clickButtonReiniciarMSResultadoFragment);

        return view;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        if (activity == null) {
            activity = (AcoesMSResultadoFragment) getActivity();

            tituloSimulado = activity.obterSimulado().titulo;
            qtdAcertos = activity.obterQtdAcertos();
            qtdErros = activity.obterQtdErros();
            qtdNaoRespondidos = activity.obterQtdNaoRespondidos();
        }

        textViewTituloSimuladoMSResultadoFragment.setText(tituloSimulado);

        carregarPieChartQtdAcertoEErroMEResultado();
    }

    @Override
    public void exibirComponentes() {
        textViewTituloSimuladoMSResultadoFragment.setVisibility(View.VISIBLE);
        pieChartQtdAcertoErroEFalstososMSResultadoFragment.setVisibility(View.VISIBLE);
        buttonFinalizarMSResultadoFragment.setVisibility(View.VISIBLE);
        buttonReiniciarMSResultadoFragment.setVisibility(View.VISIBLE);
    }

    @Override
    public void esconderComponentes() {
        textViewTituloSimuladoMSResultadoFragment.setVisibility(View.GONE);
        pieChartQtdAcertoErroEFalstososMSResultadoFragment.setVisibility(View.GONE);
        buttonFinalizarMSResultadoFragment.setVisibility(View.GONE);
        buttonReiniciarMSResultadoFragment.setVisibility(View.GONE);
    }

    private void carregarPieChartQtdAcertoEErroMEResultado() {

        pieChartQtdAcertoErroEFalstososMSResultadoFragment.setHoleRadius(40f);
        pieChartQtdAcertoErroEFalstososMSResultadoFragment.setRotationEnabled(true);
        pieChartQtdAcertoErroEFalstososMSResultadoFragment.animateXY(1500, 1500);
        pieChartQtdAcertoErroEFalstososMSResultadoFragment.setDescription(P.STRING_EMPITY);

        List<Entry> valoresY = new ArrayList<Entry>();
        valoresY.add(new Entry(qtdNaoRespondidos, 2));
        valoresY.add(new Entry(qtdAcertos, 1));
        valoresY.add(new Entry(qtdErros, 0));

        ArrayList<String> valoresX = new ArrayList<String>();
        valoresX.add(getResources().getString(R.string.nao_respondidos));
        valoresX.add(getResources().getString(R.string.acertos));
        valoresX.add(getResources().getString(R.string.erros));

        ArrayList<Integer> cores = new ArrayList<Integer>();
        cores.add(getResources().getColor(R.color.cinza_nao_respondidos));
        cores.add(getResources().getColor(R.color.azul_acerto));
        cores.add(getResources().getColor(R.color.vermelho_erro));

        PieDataSet setGraficoPizza = new PieDataSet(valoresY,P.STRING_EMPITY);
        setGraficoPizza.setSliceSpace(3f);
        setGraficoPizza.setColors(cores);

        PieData data = new PieData(valoresX, setGraficoPizza);
        pieChartQtdAcertoErroEFalstososMSResultadoFragment.setData(data);
        pieChartQtdAcertoErroEFalstososMSResultadoFragment.highlightValues(null);
        pieChartQtdAcertoErroEFalstososMSResultadoFragment.invalidate();
    }

    public interface AcoesMSResultadoFragment extends AcoesGenericoFragment {
        int obterQtdAcertos();
        int obterQtdErros();
        int obterQtdNaoRespondidos();
        Simulado obterSimulado();
        void reiniciar();
        void finalizar();
    }
}